<?php
/**
 * ORM de la tabla "noticia"
 * @author  Sahib J. Leo
 */
class Noticia extends OfjORM
{

  /**
   * Ancho de la imagen de la noticia
   */
  const IMG_WIDTH  = 300;

  /**
   * Alto de la imagen de la noticia
   */
  const IMG_HEIGHT = 175;

  /**
   * Path de las imagenes de noticias, a partir la raiz
   */
  const IMG_PATH = 'img/uploads/noticias';

  /**
   * Constructor
   * @param boolean $from_static
   */
  public function __construct($from_static = false)
  {
    parent::__construct('Noticia', 'noticia', 'default', $from_static);
  }

  /**
   * Devuelve un objeto Noticia listo para realizar queries
   * @return Noticia
   */
  public static function instance()
  {
    return new Noticia(true);
  }

  /**
   * Devuelve el URL de la imagen de un objeto Noticia ya instanciado
   * Si $Noticia es false o la imagen de la noticia no existe devuelve la URL
   * de una imagen de posición.
   * 
   * @param  Noticia $Noticia
   * @return string
   */
  public static function getImageUrl($Noticia)
  {
    if($Noticia
      && is_file(PATH . Noticia::IMG_PATH . '/' . $Noticia->id . '.jpg')){
      $image = $Noticia->id;
    } else {
      $image = 'no-image';
    }

    return Noticia::IMG_PATH . "/$image.jpg";
  }

  /**
   * Elimina las noticias dummy que tienen más de 24 hrs de vida
   */
  public static function deleteDummy()
  {
    // Cargamos los datos de las noticias dummy para borrar sus imagenes en
    // caso de existir.
    $criteria = array(
      'where'
        => '`titulo` IS NULL AND `fecha_creacion` < DATE_SUB(NOW(), INTERVAL 1 DAY)'
    );

    $noticias_dummy = Noticia::instance()->find($criteria);
    foreach($noticias_dummy as $NoticiaDummy){
      Noticia::deleteImage($NoticiaDummy->id);
    }

    // Ahora borrar todos los registros de las noticias dummy
    unset($noticias_dummy);
    Noticia::instance()->delete($criteria);
  }

  /**
   * Borra el archivo de imagen que le corresponde a la noticia con el
   * ID $noticia_id
   * @param  int $noticia_id
   */
  public static function deleteImage($noticia_id)
  {
    $dummy_img_file = '../../' . Noticia::IMG_PATH . '/' . $noticia_id . '.jpg';
      if( is_file( $dummy_img_file ) ){
        unlink($dummy_img_file);
      }
  }

  /**
   * Devuelve una cadena de texto plano con las primeras $max_words palabras
   * de la noticia.
   * @return string
   */
  public function getSummary($max_rows)
  {
    return implode(' ', array_slice(explode(' '
      , strip_tags($this->get('contenido'))), 0, $max_rows));
  }
  
}